Platform Explorer / Nuxeo Platform 5.8

Extension point chains

Documentation

Operation Chain registration

Contribution Descriptors

  • Class: org.nuxeo.ecm.automation.core.OperationChainContribution

Existing Contributions

Contributions are presented in the same order as the registration order on this extension point. This order is displayed before the contribution name, in brackets.

  • nuxeo-web-mobile-dm-5.8.jar
    <extension point="chains" target="org.nuxeo.ecm.core.operation.OperationServiceComponent">
        <chain id="sendEmailToMe">
          <operation id="Context.FetchDocument"/>
          <operation id="Notification.SendMail">
            <param name="from" type="string">noreply@nuxeo.com</param>
            <param name="message" type="string">
              &lt;html&gt;
                &lt;head&gt;
                &lt;/head&gt;
                &lt;body&gt;
                  You asked to send an email to your own email account.
                  You will find files attached to this email.
                  &lt;br/&gt;
                  Original document is &lt;a href="${docUrl}"&gt;${Document['dc:title']}&lt;/a&gt;. 
                  &lt;br/&gt;
                  Sent from Nuxeo.
                &lt;/body&gt;
              &lt;/html&gt;
            </param>
            <param name="subject" type="string">[Nuxeo] MailMe Service - new Binary sent</param>
            <param name="to" type="stringlist">expr:Fn.getEmail(Context.principal.name)</param>
            <param name="HTML" type="boolean">true</param>
            <param name="files" type="stringlist">file:content</param>
            <param name="viewId" type="string">view_documents</param>
          </operation>
        </chain>
      </extension>
  • nuxeo-dam-jsf-5.8.jar
    <extension point="chains" target="org.nuxeo.ecm.core.operation.OperationServiceComponent">
    
        <chain id="Dam.ImportInSeam">
          <operation id="Dam.Import">
            <param name="overwrite" type="boolean">true</param>
          </operation>
          <operation id="Seam.InitContext"/>
          <operation id="Seam.AddMessage">
            <param name="severity" type="string">INFO</param>
            <param name="message" type="string">label.dam.assets.imported</param>
          </operation>
          <operation id="Seam.Refresh"/>
          <operation id="Seam.DestroyContext"/>
        </chain>
    
        <chain id="Dam.ImportWithMetaDataInSeam">
          <operation id="Dam.Import">
            <param name="overwrite" type="boolean">true</param>
            <param name="importInCurrentDocument" type="boolean">true</param>
          </operation>
          <operation id="Document.Update">
            <param name="properties" type="properties">expr:Context.get("docMetaData")
            </param>
          </operation>
          <operation id="Seam.AddMessage">
            <param name="severity" type="string">INFO</param>
            <param name="message" type="string">label.dam.assets.imported</param>
          </operation>
          <operation id="Seam.Refresh"/>
        </chain>
    
      </extension>
  • nuxeo-platform-rendition-core-5.8.jar
    <extension point="chains" target="org.nuxeo.ecm.core.operation.OperationServiceComponent">
        <chain id="blobToPDF">
          <operation id="Blob.Pop"/>
          <operation id="Blob.ToPDF"/>
        </chain>
      </extension>
  • nuxeo-platform-comment-workflow-5.8.jar
    <extension point="chains" target="org.nuxeo.ecm.core.operation.OperationServiceComponent">
    
        <chain id="acceptComment">
          <operation id="Context.FetchDocument"/>
          <operation id="Comment.Moderate">
            <param name="accept" type="boolean">true</param>
          </operation>
        </chain>
    
        <chain id="rejectComment">
          <operation id="Context.FetchDocument"/>
          <operation id="Comment.Moderate">
            <param name="accept" type="boolean">false</param>
          </operation>
        </chain>
    
      </extension>
  • nuxeo-platform-document-routing-core-5.8.jar
    <extension point="chains" target="org.nuxeo.ecm.core.operation.OperationServiceComponent">
        <chain id="setDone">
          <operation id="Document.Routing.Step.Done"/>
        </chain>
        <chain id="simpleValidate">
          <operation id="Document.Routing.Resume.Step"/>
        </chain>
        <chain id="simpleRefuse">
          <operation id="Document.Routing.Resume.Step"/>
        </chain>
        <chain id="simpleUndo">
          <operation id="Document.Routing.BackToReady"/>
        </chain>
        <chain id="setNextStep">
          <operation id="Update.NextStep.ConditionalFolder"/>
        </chain>    
        <chain id="decideNextStepAndSimpleValidate">
          <operation id="Update.NextStep.ConditionalFolder">
          	<param name="nextStepPos" type="string">expr:Context['nextStepPos']</param>
          </operation>
          <operation id="Document.Routing.Resume.Step"/>
        </chain>
        <chain id="updateCommentsOnDoc">
          <operation id="Document.Routing.UpdateCommentsInfoOnDocument"/>  
        </chain>
        <chain id="simpleChooseNextOption1AndDone">
          <operation id="Update.NextStep.ConditionalFolder">
          	<param name="nextStepPos" type="string">1</param>
          </operation>
          <operation id="Document.Routing.Step.Done"/>
        </chain>
        <chain id="simpleChooseNextOption2AndDone">
          <operation id="Update.NextStep.ConditionalFolder">
          	<param name="nextStepPos" type="string">2</param>
          </operation>
          <operation id="Document.Routing.Step.Done"/>
        </chain>
      </extension>
  • nuxeo-platform-webapp-base-5.8.jar
    <extension point="chains" target="org.nuxeo.ecm.core.operation.OperationServiceComponent">
    
        <chain id="downloadFilesZip">
          <operation id="Context.FetchDocument"/>
          <operation id="Blob.GetAll"/>
          <operation id="Blob.CreateZip">
            <param name="filename" type="string">attachments.zip
            </param>
          </operation>
          <operation id="Seam.DownloadFile"/>
        </chain>
    
      </extension>
  • nuxeo-social-workspace-core-5.8.jar
    <extension point="chains" target="org.nuxeo.ecm.core.operation.OperationServiceComponent">
        <chain id="SocialWorkspaceCreatedChain">
          <operation id="Context.FetchDocument"/>
          <operation id="Context.SetVar">
            <param name="name" type="string">admins</param>
            <param name="value" type="object">administrators</param>
          </operation>
          <operation id="Workflow.CreateTask">
            <param name="task name" type="string">validateSocialWorkspace</param>
            <param name="directive" type="string">VERIFICATION</param>
            <param name="comment" type="string">Please validate social workspace</param>
            <param name="variable name for actors prefixed ids" type="string">admins</param>
            <param name="create one task per actor" type="boolean">true</param>
          </operation>
          <operation id="Notification.SendMail">
            <param name="rollbackOnError" type="boolean">false</param>
            <param name="from" type="string">expr:Env["mail.from"]</param>
            <param name="message" type="string">&lt;html&gt;
    Hello,
    
    Social Workspace &lt;a href="${docUrl}"&gt;${Document.title}&lt;/a&gt; was created. Please validate it &lt;a href="${baseUrl}nxadmin/${Session.repositoryName}${Document.path}@view_admin?tabIds=MAIN_TABS%3Aadmin%2CNUXEO_ADMIN%3ASocialWorkspacesAdministration"&gt;here&lt;/a&gt;.
    &lt;/html&gt;</param>
            <param name="subject" type="string">Social Workspace  created</param>
            <param name="HTML" type="string">true</param>
            <param name="to" type="stringlist">expr:Fn.getEmailsFromGroup("administrators")</param>
          </operation>
        </chain>
        <chain id="SocialWorkspaceNotValidatedChain">
          <operation id="Context.FetchDocument"/>
          <operation id="Document.SetLifeCycle">
            <param name="value" type="string">delete</param>
          </operation>
          <operation id="Notification.SendMail">
            <param name="rollbackOnError" type="boolean">false</param>
            <param name="from" type="string">expr:Env["mail.from"]</param>
            <param name="message" type="string">Social Workspace "${Document.title}" was not validated by adminitrators and it will be suspended.</param>
            <param name="subject" type="string">expr:Social Workspace not validated: @{Document.title}</param>
            <param name="to" type="stringlist">expr:Fn.getEmail(Document["dc:creator"])</param>
          </operation>
        </chain>
      </extension>
  • nuxeo-platform-webapp-core-5.8.jar
    <extension point="chains" target="org.nuxeo.ecm.core.operation.OperationServiceComponent">
    
        <chain id="addCurrentDocumentToWorklist">
          <operation id="Context.FetchDocument"/>
          <operation id="Seam.AddToWorklist"/>
          <operation id="Seam.AddMessage">
            <param name="severity" type="string">INFO</param>
            <param name="message" type="string">label.document.added.to.worklist</param>
          </operation>
        </chain>
    
      </extension>
  • nuxeo-platform-document-routing-dm-5.8.jar
    <extension point="chains" target="org.nuxeo.ecm.core.operation.OperationServiceComponent">
    
        <chain id="simpleTask">
          <operation id="Context.FetchDocument"/>
          <operation id="Workflow.CreateRoutingTask">
            <param name="accept operation chain" type="string">
              setTaskDone
            </param>
            <param name="reject operation chain" type="string">
              setTaskDone
            </param>
            <param name="mappingProperties" type="Properties">
              <property key="dc:description">StepTask:dc:description</property>
              <property key="nt:directive">StepTask:dc:description</property>
            </param>
           </operation> 
    	   <operation id="Context.RunDocumentOperationInNewTx">
    	     <param name="rollbackGlobalOnError" type="boolean">false</param>
    	     <param name="id" type="string">sendTaskCreatedNotificationMail</param>
    	   </operation>
        </chain>
        
        <chain id="followLifeCycleTransitionTask">
          <operation id="Context.FetchDocument"/>
          <operation id="Workflow.CreateRoutingTask">
            <param name="accept operation chain" type="string">
              followLifeCycleTransition
            </param>
            <param name="reject operation chain" type="string">
              setTaskDone
            </param>
            <param name="mappingProperties" type="Properties">
              <property key="dc:description">StepTask:dc:description</property>
            </param>
          </operation>
          <operation id="Context.RunDocumentOperationInNewTx">
    	     <param name="rollbackGlobalOnError" type="boolean">false</param>
    	     <param name="id" type="string">sendTaskCreatedNotificationMail</param>
    	   </operation>
        </chain>
        
         <chain id="publishTask">
          <operation id="Context.FetchDocument"/>
          <operation id="Workflow.CreateRoutingTask">
            <param name="accept operation chain" type="string">
              publishDocument
            </param>
            <param name="reject operation chain" type="string">
              setTaskDone
            </param>
            <param name="mappingProperties" type="Properties">
              <property key="dc:description">StepTask:dc:description</property>
            </param>
          </operation>
          <operation id="Context.RunDocumentOperationInNewTx">
    	     <param name="rollbackGlobalOnError" type="boolean">false</param>
    	     <param name="id" type="string">sendTaskCreatedNotificationMail</param>
    	   </operation>
        </chain>
        
         <chain id="conditionalTask">
          <operation id="Context.FetchDocument"/>
          <operation id="Workflow.CreateRoutingTask">
            <param name="accept operation chain" type="string">
              evaluateCondition
            </param>
            <param name="reject operation chain" type="string">
              setTaskDone
            </param>
            <param name="mappingProperties" type="Properties">
              <property key="dc:description">StepTask:dc:description</property>
            </param>
          </operation>
          <operation id="Context.RunDocumentOperationInNewTx">
    	     <param name="rollbackGlobalOnError" type="boolean">false</param>
    	     <param name="id" type="string">sendTaskCreatedNotificationMail</param>
    	   </operation>
        </chain>
    
        <chain id="setTaskDone">
          <operation id="Document.Routing.SetRunningStepFromTask">
             <param name="mappingComments" type="boolean">true</param>
          </operation>
          <operation id="Document.Routing.Resume.Step"/>
        </chain>
      
       <chain id="undoRunningTask">
         <operation id="Workflow.RemoveRoutingTask"/>
         <operation id="Document.Routing.BackToReady"/>
       </chain>
      
        <chain id="followLifeCycleTransition">
          <operation id="Context.FetchDocument"/>
          <operation id="Document.Routing.SetRunningStepFromTask"/>
          <operation id="Document.SetLifeCycle">
            <param name="value" type="string">expr:Context["document.routing.step"].getDocument().getPropertyValue("tkst:directive")</param>
          </operation>
    
          <operation id="Document.Routing.Resume.Step"/>
        </chain>
        
        <chain id="publishDocument">
          <operation id="Context.FetchDocument"/>
          <operation id="Document.Routing.SetRunningStepFromTask"/>
          <operation id="Document.Publish">
          	<param name="target" type="string">expr:Context["document.routing.step"].getDocument().getPropertyValue("tkst:directive")</param>
          </operation>
          <operation id="Document.Routing.Resume.Step"/>
        </chain>
        
         <chain id="evaluateCondition">
          <operation id="Context.FetchDocument"/>
          <operation id="Document.Routing.SetRunningStepFromTask"/>
          <operation id="Document.Routing.EvaluateCondition">
          	<param name="subject" type="string">expr:Context["document.routing.step"].getDocument().getPropertyValue("ctkst:subject")</param>
          	<param name="operator" type="string">expr:Context["document.routing.step"].getDocument().getPropertyValue("ctkst:operator")</param>
          	<param name="value" type="string">expr:Context["document.routing.step"].getDocument().getPropertyValue("ctkst:value")</param>
          </operation>
          <operation id="Update.NextStep.ConditionalFolder">
          	<param name="nextStepPos" type="string">expr:Context['nextStepPos']</param>
          </operation>
          <operation id="Document.Routing.Resume.Step"/>
        </chain>
        
        <chain id="sendTaskCreatedNotificationMail">
          <operation id="Notification.SendMail">
            <param name="from" type="string">Administrator@nuxeo.com</param>
            <param name="message" type="string">template:routingTaskAssigned</param>
            <param name="subject" type="string">expr:Context["document.routing.step"].getDocument().getPropertyValue("dc:title")</param>
            <param name="to" type="stringlist">expr:Fn.getEmails(Context["document.routing.task.actors"])</param>
            <param name="HTML" type="boolean">false</param>
          </operation>
       </chain>  
      </extension>
  • nuxeo-automation-jsf-5.8.jar
    <extension point="chains" target="org.nuxeo.ecm.core.operation.OperationServiceComponent">
        <chain id="ImportWorklist">
          <operation id="Seam.InitContext"/>
          <operation id="UserWorkspace.CreateDocumentFromBlob"/>
          <operation id="Document.Save"/>
          <operation id="Seam.AddToWorklist"/>
          <operation id="Seam.DestroyContext"/>
        </chain>
        <chain id="ImportClipboard">
          <operation id="Seam.InitContext"/>
          <operation id="UserWorkspace.CreateDocumentFromBlob"/>
          <operation id="Document.Save"/>
          <operation id="Seam.AddToClipboard"/>
          <operation id="Seam.DestroyContext"/>
        </chain>
        <chain id="SeamActions.GET">
          <operation id="Seam.RunOperation">
            <param name="id" type="string">Actions.GET</param>
          </operation>
        </chain>
    
        <chain id="FileManager.ImportWithMetaDataInSeam">
          <operation id="FileManager.Import">
            <param name="overwite" type="boolean">true</param>
          </operation>
          <operation id="Document.Update">
            <param name="properties" type="properties">expr:Context.get("docMetaData")
            </param>
          </operation>
          <operation id="Seam.RunOperation">
            <param name="id" type="string">Seam.Refresh</param>
          </operation>
        </chain>
    
        <chain id="FileManager.ImportInSeam">
          <operation id="FileManager.Import">
            <param name="overwite" type="boolean">true</param>
          </operation>
          <operation id="Seam.RunOperation">
            <param name="id" type="string">Seam.Refresh</param>
          </operation>
        </chain>
    
      </extension>
  • nuxeo-automation-features-5.8.jar
    <extension point="chains" target="org.nuxeo.ecm.core.operation.OperationServiceComponent">
        <chain id="VersionAndAttachFile">
          <operation id="Blob.PushList">
          </operation>
          <operation id="Document.Fetch">
            <param name="value" type="string">expr:Context.get("currentDocument")</param>
          </operation>
          <operation id="Document.CheckIn">
            <param name="version" type="string">minor</param>
            <param name="comment" type="string">Automatic checkin before file update</param>
          </operation>
          <operation id="Context.SetInputAsVar">
            <param name="name" type="string">newDocument</param>
          </operation>
          <operation id="Context.SetVar">
            <param name="name" type="string">currentDocument</param>
            <param name="value" type="string">expr:Context.get("newDocument").id</param>
          </operation>
          <operation id="Blob.PopList">
          </operation>
          <operation id="BlobHolder.Attach">
            <param name="useMainBlob" type="boolean">true</param>
          </operation>
        </chain>
        <chain id="AttachFiles">
          <operation id="BlobHolder.Attach">
            <param name="useMainBlob" type="boolean">false</param>
          </operation>
        </chain>
        <chain id="VersionAndAttachFiles">
          <operation id="Blob.PushList">
          </operation>
          <operation id="Document.Fetch">
            <param name="value" type="string">expr:Context.get("currentDocument")</param>
          </operation>
          <operation id="Document.CheckIn">
            <param name="version" type="string">minor</param>
            <param name="comment" type="string">Automatic checkin before files update</param>
          </operation>
          <operation id="Context.SetInputAsVar">
            <param name="name" type="string">newDocument</param>
          </operation>
          <operation id="Context.SetVar">
            <param name="name" type="string">currentDocument</param>
            <param name="value" type="string">expr:Context.get("newDocument").id</param>
          </operation>
          <operation id="Blob.PopList">
          </operation>
          <operation id="BlobHolder.Attach">
            <param name="useMainBlob" type="boolean">false</param>
          </operation>
        </chain>
        <chain id="FileManager.ImportWithMetaData">
          <operation id="FileManager.Import">
             <param name="overwite" type="boolean">true</param>
          </operation>
          <operation id="Document.Update">
            <param name="properties" type="properties">expr:Context.get("docMetaData")</param>
          </operation>
        </chain>
      </extension>
  • nuxeo-platform-document-routing-default-5.8.jar
    <extension point="chains" target="org.nuxeo.ecm.core.operation.OperationServiceComponent">
        <chain id="NRD-AC-PR-ChooseParticipants-Output">
          <operation id="Context.FetchDocument"/>
          <operation id="Context.RunOperation">
            <param name="id" type="string">NRD-AC-PR-LockDocument</param>
            <param name="isolate" type="boolean">false</param>
          </operation>
          <operation id="Context.SetWorkflowVar">
            <param name="name" type="string">initiatorComment</param>
            <param name="value" type="object">expr:NodeVariables["comment"]</param>
          </operation>
        </chain>
        <chain id="NRD-AC-PR-LockDocument">
          <operation id="Context.FetchDocument"/>
          <operation id="Auth.LoginAs">
            <param name="name" type="string">expr:workflowInitiator</param>
          </operation>
          <operation id="Document.Lock"/>
        </chain>
        <chain id="NRD-AC-PR-UnlockDocument">
          <operation id="Context.FetchDocument"/>
          <operation id="Document.Unlock"/>
        </chain>
        <chain id="NRD-AC-PR-ValidateNode-Output">
          <operation id="Context.FetchDocument"/>
          <operation id="Context.RunOperation">
            <param name="id" type="string">NRD-AC-PR-UnlockDocument</param>
            <param name="isolate" type="boolean">false</param>
          </operation>
          <operation id="Context.RunOperation">
            <param name="id" type="string">logInAudit</param>
            <param name="isolate" type="boolean">false</param>
          </operation>
        </chain>
        <chain id="NRD-AC-PR-force-validate">
          <operation id="Context.FetchDocument"/>
          <operation id="Auth.LoginAs">
            <param name="name" type="string">expr:Context["workflowInitiator"]</param>
          </operation>
          <operation id="Audit.Log">
            <param name="event" type="string">Consultation time excedeed</param>
            <param name="category" type="string">Review workflow</param>
            <param name="comment" type="string">Some consultation tasks were aborted by the system as they received no feedback message.</param>
          </operation>
          <operation id="Workflow.ResumeNodeOperation"/>
        </chain>
        <chain id="NRD-AC-PR-storeTaskInfo">
          <operation id="Context.FetchDocument"/>
          <operation id="Context.RunScript">
            <param name="script" type="string">This[0]</param>
          </operation>
          <operation id="Context.SetVar">
            <param name="name" type="string">tasksInfo</param>
            <param name="value" type="object">expr:NodeVariables["tasks"]</param>
          </operation>
          <operation id="Context.SetVar">
            <param name="name" type="string">numberNA</param>
            <param name="value" type="object">expr:NodeVariables["tasks"].getNumberEndedWithStatus("NA")</param>
          </operation>
          <operation id="Context.SetVar">
            <param name="name" type="string">numberRejected</param>
            <param name="value" type="object">expr:NodeVariables["tasks"].getNumberEndedWithStatus("reject")</param>
          </operation>
          <operation id="Context.SetVar">
            <param name="name" type="string">numberApproved</param>
            <param name="value" type="object">expr:NodeVariables["tasks"].getNumberEndedWithStatus("approve")</param>
          </operation>
          <operation id="Context.SetVar">
            <param name="name" type="string">numberOfTasks</param>
            <param name="value" type="object">expr:NodeVariables["numberOfTasks"]</param>
          </operation>
          <operation id="Render.Document">
            <param name="template" type="string">template:NRD-PR-TasksInfo</param>
            <param name="filename" type="string">output.ftl</param>
            <param name="mimetype" type="string">text/xml</param>
            <param name="type" type="string">ftl</param>
          </operation>
          <operation id="Context.SetWorkflowVar">
            <param name="name" type="string">review_result_file</param>
            <param name="value" type="object">expr:This.get(0)</param>
          </operation>
          <operation id="Context.SetWorkflowVar">
            <param name="name" type="string">review_result</param>
            <param name="value" type="object">expr:This.get(0).getString()</param>
          </operation>
        </chain>
        <chain id="initInitiatorComment">
          <operation id="Context.RunScript">
            <param name="script" type="string">if((NodeVariables["comment"] != "") AND (NodeVariables["comment"] != null)){
    WorkflowVariables["initiatorComment"]= NodeVariables["comment"];}</param>
          </operation>
        </chain>
        <chain id="logInAudit">
          <operation id="Audit.Log">
            <param name="event" type="string">expr:NodeVariables["button"] =="reject"?"Document refused":"Document validated"</param>
            <param name="category" type="string">Review workflow</param>
            <param name="comment" type="string">expr:@{nodeLastActor} @{NodeVariables["button"] =="reject"?"Document refused":"validated"} the document with the following comment: @{NodeVariables["comment"]}</param>
          </operation>
        </chain>
        <chain id="nextAssignee">
          <operation id="Context.RunScript">
            <param name="script" type="string">if (NodeVariables["button"] == "validate") {
      WorkflowVariables["index"] = WorkflowVariables["index"] + 1;
    }
    else if (NodeVariables["button"] == "reject") {
      WorkflowVariables["index"] = WorkflowVariables["index"] - 1;
    }
    else if (NodeVariables["button"] == "submit") {
      WorkflowVariables["index"] = 0;
    }</param>
          </operation>
        </chain>
        <chain id="notifyInitiatorEndOfWorkflow">
          <operation id="Context.FetchDocument"/>
          <operation id="Notification.SendMail">
            <param name="from" type="string">expr:Env["mail.from"]</param>
            <param name="message" type="string">The document was approved by every participant.</param>
            <param name="subject" type="string">expr:@{Env["nuxeo.notification.eMailSubjectPrefix"]} Document approved</param>
            <param name="to" type="stringlist">expr:Fn.getEmail(workflowInitiator)</param>
            <param name="HTML" type="boolean">false</param>
            <param name="rollbackOnError" type="boolean">true</param>
            <param name="viewId" type="string">view_documents</param>
          </operation>
        </chain>
        <chain id="reinitAssigneeComment">
          <operation id="Context.RunScript">
            <param name="script" type="string">if((NodeVariables["comment"] != "") AND (NodeVariables["comment"] != null)){
    NodeVariables["comment"]= null;}</param>
          </operation>
        </chain>
        <chain id="terminateWorkflow">
          <operation id="Context.FetchDocument"/>
          <operation id="Context.RunOperation">
            <param name="id" type="string">logInAudit</param>
            <param name="isolate" type="boolean">false</param>
          </operation>
          <operation id="Context.RunDocumentOperationInNewTx">
            <param name="id" type="string">notifyInitiatorEndOfWorkflow</param>
            <param name="isolate" type="boolean">false</param>
            <param name="rollbackGlobalOnError" type="boolean">false</param>
          </operation>
          <operation id="Context.RunOperation">
            <param name="id" type="string">expr:WorkflowVariables["validationOrReview"] == "validation"?"validateDocument":"voidChain"</param>
            <param name="isolate" type="boolean">false</param>
          </operation>
          <operation id="Audit.Log">
            <param name="event" type="string">Review completed successfully</param>
            <param name="category" type="string">Review workflow</param>
            <param name="comment" type="string">All the participants of the review have approved the document.</param>
          </operation>
        </chain>
        <chain id="validateDocument">
          <operation id="Context.FetchDocument"/>
          <operation id="Document.SetLifeCycle">
            <param name="value" type="string">approve</param>
          </operation>
          <operation id="Document.CheckIn">
            <param name="version" type="string">minor</param>
            <param name="comment" type="string">Automatic checkin after validation</param>
          </operation>
        </chain>
        <chain id="voidChain">
          <operation id="Context.FetchDocument"/>
        </chain>
      </extension>
  • nuxeo-jenkins-report-3.2.0.jar
    <extension point="chains" target="org.nuxeo.ecm.core.operation.OperationServiceComponent">
        <chain id="JenkinsReportCreation">
          <operation id="Context.FetchDocument"/>
          <operation id="Document.SetProperty">
            <param name="value" type="serializable">expr:CurrentUser.name</param>
            <param name="xpath" type="string">jenkinsreport:reporter</param>
            <param name="save" type="boolean">false</param>
          </operation>
          <operation id="Document.SetProperty">
            <param name="value" type="serializable">expr:@{CurrentDate.year}/@{CurrentDate.format("MM")}/@{CurrentDate.format("dd")}</param>
            <param name="xpath" type="string">dc:title</param>
            <param name="save" type="boolean">false</param>
          </operation>
          <operation id="Document.SetProperty">
            <param name="value" type="serializable">expr:CurrentDate.calendar</param>
            <param name="xpath" type="string">jenkinsreport:report_date</param>
            <param name="save" type="boolean">false</param>
          </operation>
          <operation id="Document.SetProperty">
            <param name="value" type="serializable">0</param>
            <param name="xpath" type="string">jenkinsreport:number_failed</param>
            <param name="save" type="boolean">false</param>
          </operation>
          <operation id="Document.SetProperty">
            <param name="value" type="serializable">0</param>
            <param name="xpath" type="string">jenkinsreport:previous_number_failed</param>
            <param name="save" type="boolean">false</param>
          </operation>
          <operation id="Document.SetProperty">
            <param name="value" type="serializable">0</param>
            <param name="xpath" type="string">jenkinsreport:previous_number_unclaimed</param>
            <param name="save" type="boolean">false</param>
          </operation>
        </chain>
        <chain id="JenkinsReportModified">
          <operation id="Context.FetchDocument"/>
          <operation id="Context.RunScript">
            <param name="script" type="string">var jobs = Document["jenkinsreport:unstable_jobs"];
    nbUnclaimed = 0;
    foreach (job : jobs) {
      if (job["claimer"] == empty and job["type"] != "SUCCESS" and job["updated_type"] != "SUCCESS") {
        nbUnclaimed ++;
      }
    }
    Document["jenkinsreport:number_unclaimed"] = nbUnclaimed;</param>
          </operation>
          <operation id="Context.RunScript">
            <param name="script" type="string">var jobs = Document["jenkinsreport:unstable_jobs"];
    nbFailing = 0;
    foreach (job : jobs) {
      if (job["type"] != "SUCCESS" and job["updated_type"] != "SUCCESS") {
        nbFailing ++;
      }
    }
    Document["jenkinsreport:number_failed"] = nbFailing;</param>
          </operation>
          <operation id="Context.RunScript">
            <param name="script" type="string">var jobs = Document["jenkinsreport:unstable_jobs"];
    nb = 0;
    foreach (job : jobs) {
      if (job["updated_type"] == "SUCCESS") {
        nb --;
      } else if (job["newly_failing"] == true) {
        nb ++;
      }
    }
    Document["jenkinsreport:report_trend"] = nb;</param>
          </operation>
        </chain>
        <chain id="JenkinsReportSendMail">
          <operation id="Context.FetchDocument"/>
          <operation id="Document.Push"/>
          <operation id="Document.GetParent"/>
          <operation id="Context.SetVar">
            <param name="name" type="string">jenkins_report_email</param>
            <param name="value" type="object">expr:Document.getProperty("jenkinsreports:report_email")</param>
          </operation>
          <operation id="Context.SetVar">
            <param name="name" type="string">jenkins_url</param>
            <param name="value" type="object">expr:Document.getProperty("jenkinsreports:view_url")</param>
          </operation>
          <operation id="Document.Pull"/>
          <operation id="Notification.SendMail">
            <param name="from" type="string">expr:CurrentUser.email</param>
            <param name="message" type="string">template:JenkinsReportSendMail</param>
            <param name="subject" type="string">expr:Jenkins Report - @{Document.title}</param>
            <param name="to" type="stringlist">expr:Context["jenkins_report_email"]</param>
            <param name="HTML" type="boolean">true</param>
            <param name="rollbackOnError" type="boolean">true</param>
            <param name="viewId" type="string">view_documents</param>
          </operation>
          <operation id="Seam.AddInfoMessage">
            <param name="message" type="string">Email sent</param>
          </operation>
        </chain>
        <chain id="JenkinsReportsContainerCreation">
          <operation id="Context.FetchDocument"/>
          <operation id="Document.SetProperty">
            <param name="value" type="serializable">http://qa.nuxeo.org/jenkins/view/Dashboard/</param>
            <param name="xpath" type="string">jenkinsreports:view_url</param>
            <param name="save" type="boolean">false</param>
          </operation>
          <operation id="Document.SetProperty">
            <param name="value" type="serializable">http://qa.nuxeo.org/jenkins/claims/</param>
            <param name="xpath" type="string">jenkinsreports:claim_url</param>
            <param name="save" type="boolean">false</param>
          </operation>
        </chain>
      </extension>